/*
    统一封装接口方法
    每个方法负责请求一个url地址
    逻辑页面，导入这个接口方法，就能发请求
    好处：请求url路径，可以在这里统一管理
*/
import request from '@/utils/request.js'
// axios内部会把参数对象转为json字符串格式发给后台
// 登录 - 登录接口
export const loginAPI = ({ mobile, code }) => request({
  url: '/v1_0/authorizations',
  method: 'POST',
  data: {
    mobile,
    code
  }
})

// 频道 - 获取所有频道
export const getAllChannelsAPI = () => request({
  url: '/v1_0/channels',
  method: 'GET'
})

// 频道 - 获取用户的选择频道，用户没有登录，会默认返回后台设置的默认频道
export const getUserChannelsAPI = () => request({
  url: '/v1_0/user/channels'
})

// 频道 - 更新覆盖频道
export const updateChannelAPI = ({ channels }) => request({
  url: '/v1_0/user/channels',
  method: 'PUT',
  data: {
    channels // 用户已选频道数组
  }
})

// 频道 - 删除用户指定的频道
export const removeTheChannelAPI = ({ channelId }) => request({
  url: `/v1_0/user/channels/${channelId}`,
  method: 'DELETE'
})
// 文章 - 获取文章列表
export const getAllArticleListAPI = ({ channel_id, timestamp }) => request({
  url: '/v1_0/articles',
  params: {
    channel_id,
    timestamp
  }
})

// 文章 - 不感兴趣
export const articleDislikeAPI = ({ target }) => request({
  url: '/v1_0/article/dislikes',
  method: 'POST',
  data: {
    target: target
  }
})

// 文章 - 反馈 - 反馈垃圾内容
export const reportArticleAPI = ({ artId, type }) => request({
  url: '/v1_0/article/reports',
  method: 'POST',
  data: {
    target: artId,
    type: type,
    remark: '文章页面没有评论输入框，这里直接写死'

  }
})

// 文章 - 获取文章详情
export const detailAPI = ({ artId }) => request({
  url: `/v1_0/articles/${artId}`
})

// 搜索 - 联想菜单
export const suggestListAPI = ({ keywords }) => request({
  url: 'https://toutiao.itheima.net/v1_0/suggestion',
  params: {
    q: keywords
  }
})

// 搜索 - 结果列表
export const searchResultAPI = ({ page = 1, per_page = 10, q }) => request({
  url: 'https://toutiao.itheima.net/v1_0/search',
  params: {
    page,
    per_page,
    q
  }
})
// 用户 - 获取个人资料(编辑用)
export const userProfileAPI = () => request({
  url: '/v1_0/user/profile'
})

// 用户 - 获取基本信息
export const userInfoAPI = () => request({
  url: '/v1_0/user'
})

// 用户 - 更新头像
export const updateUserPhotoAPI = (fd) => request({
  url: '/v1_0/user/photo',
  method: 'PATCH',
  // 如果你的请求体是formdata表单对象，也不用自己添加，浏览器会发现是multipart/form-data,浏览器携带的，data请求体必须是formdata对象
  data: fd // fd是外面传进来的表单对象
})

// 用户 - 更新用户基本资料
export const updateUserProfileAPI = (dataObj) => {
  // 判断，有什么值，再带什么参数给后台
  // 循环判断没对key+value，如果是undefined删除这对键值对

  const obj = {
    name: '',
    gender: 0,
    birthday: '',
    intro: ''
  }
  for (const prop in obj) { // 遍历参数对象中的每个key
    if (dataObj[prop] === undefined) { // 用key去外面的参数对象匹配
      delete obj[prop] // 如果传进来的没有，那就把obj中的删掉
    } else {
      obj[prop] = dataObj[prop] // 如果传进来有，那就把值赋给obj
    }
  }
  return request({
    url: '/v1_0/user/profile',
    method: 'PATCH', // 局部更新 input是全都更新
    data: obj
  })
}

// 用户 - 关注
export const userFollowedAPI = ({ userId }) => request({
  url: '/v1_0/user/followings',
  method: 'POST',
  data: {
    target: userId
  }
})
// 用户 - 取消关注
export const userUnFollowedAPI = ({ userId }) => request({
  url: `/v1_0/user/followings/${userId}`,
  method: 'DELETE'
})

// 用户 - 点赞
export const likeArticleAPI = ({ artId }) => request({
  url: '/v1_0/article/likings',
  method: 'POST',
  data: {
    target: artId
  }
})
// 用户- 取消点赞
export const unLikeArticleAPI = ({ artId }) => request({
  url: `/v1_0/article/likings/${artId}`,
  method: 'DELETE'
})

// 评论 - 获取评论
export const commentsListAPI = ({ id, offset = null, limit = 10 }) => request({
  url: '/v1_0/comments',
  params: {
    // axios只针对params参数，如果发现键值对，值为null，会忽略此参数名和值不携带在url？后面
    type: 'a',
    source: id,
    offset,
    limit
  }
})

// 评论 - 点赞评论
export const commentLikeAPI = ({ comId }) => request({
  url: '/v1_0/comment/likings',
  method: 'POST',
  data: {
    target: comId
  }
})
// 评论 - 取消点赞评论
export const commentUnLikeAPI = ({ comId }) => request({
  url: `/v1_0/comment/likings/${comId}`,
  method: 'DELETE'
})

// 评论 - 发布评论
export const commentSentAPI = ({ id, content, art_id = null }) => {
  // 1. axios中，请求体重传参，如果值为null是不会忽略这个参数的，只有params为空才会忽略
  // 2. 如果是对文章评论则不用传art_id,所以这时如果art_id为null就对文章评论
  const obj = {
    target: id,
    content
  }
  // 如果有第三个参数且不为空，就创建第三个参数
  if (art_id !== null) {
    obj.art_id = art_id
  }
  return request({
    url: '/v1_0/comments',
    method: 'POST',
    data: obj
  })
}
